﻿Imports PTIC_GestionExcel
Imports Actuariat
Imports PTIC_Util
Imports PTIC_GestionBDD
Imports OMANE.Modules.TauxGarantis.moteurTauxGaranti1
Imports OMANE.Modules.TauxGarantis.moteurTauxGaranti2
Imports System.Drawing
Imports OMANE.Common.Model.Parametrage

Public Class gestionExcelTxGar1OMANE
    Inherits AbstractGestionExcel

    Protected _universTxGarantis As ModelTauxGarantis
    Protected _paramEtd As ParametresList

    Public Sub New(ByRef Succes As Boolean, ByVal univers As ModelTauxGarantis, ByVal paramColl As ParametresList)
        MyBase.New(Succes)
        Me._universTxGarantis = univers
        Me._paramEtd = paramColl
        OuvrirFichierExistant(csteEmplacementParametrage & "OMANE_resTauxGarantiMethode1.xls", _
                                      "Param_fichier")
    End Sub

    Public Sub ExcelAffParamFichier()
        ChangerDeFeuilleActive("Param_fichier")
        EcrireCellule(Today, 6, 5)
        EcrireCellule(_universTxGarantis.ListeTraitements.TraitTbleEncours.FichierBDD.NomComplet, 11, 3)
        Dim i As Integer = 17
        For Each c As Correspondance In _universTxGarantis.ListeTraitements.TraitTbleEncours.ListeChampsSortie.Values
            EcrireCellule(c.description, i, 4)
            EcrireCellule(IIf(c.typeChEntree = DefinitionsTypes.typeChEntreeMapping.CONSTANT, _
                                      "''" & c.chBDD.Nom & "'", _
                                     c.chBDD.Nom), i, 5)
            i = i + 1
        Next

    End Sub

    Public Sub ExcelAffParamTranches()
        ChangerDeFeuilleActive("Param_Corresp_Tranches")
        Dim dtble_descTrAge As DataTable = CType(_universTxGarantis.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item(desctrAge),  _
                                                 ChampsTraitTranche).TableTranches
        Dim dtble_descTrCapi As DataTable = CType(_universTxGarantis.ListeTraitements.TraitTbleEncoursPrep1.ListeChampsSortie.Item("Tranche de capitaux"),  _
                                                ChampsTraitTranche).TableTranches

        'Création d'un modèle d'affichage pour les tableaux
        Dim implTableauSimple As IImplTableau
        implTableauSimple = New ImplTableauSimple()
        setImplTableau(implTableauSimple)
        creerTableau("Correspondances associées aux tranches d'âge", _
                     dtble_descTrAge, _
                     8, _
                     3)
        creerTableau("Correspondances associées aux tranches d'âge", _
                     dtble_descTrCapi, _
                     8, _
                     7)
        setImplTableau(New ImplTableauDefaut())


    End Sub

    Public Sub ExcelAffSegmentation()

        ChangerDeFeuilleActive("Param_Generaux")
        Dim implTableauSimple As IImplTableau
        implTableauSimple = New ImplTableauSimple()

        Dim tab As New DataTable
        tab.Columns.Add("NomVariable", Type.GetType("System.String"))
        Dim listVarSeg As IDictionary(Of String, Correspondance) = _universTxGarantis.Segmentation.Retenue
        For Each corresp As Correspondance In listVarSeg.Values
            Dim r As DataRow = tab.NewRow()
            r(0) = corresp.description
            tab.Rows.Add(r)
        Next
        setImplTableau(implTableauSimple)
        creerTableau("Liste des variables de segmentation", _
                     tab, _
                     8, _
                     6)
        setImplTableau(New ImplTableauDefaut())
    End Sub

    Public Sub ExcelAffParamGeneraux()
        ChangerDeFeuilleActive("Param_Generaux")
        Dim indiceLigneHautGauche As Integer = 8
        Dim indiceColonneHautGauche As Integer = 3
        Dim indiceDerniereLigne As Integer = 42
        For Each p As IParametre In _paramEtd.Values
            For i = indiceLigneHautGauche To indiceDerniereLigne
                If LireCellule(i, indiceColonneHautGauche) = p.Description Then
                    'xlEtude.EcrireCellule("OK ce paramètre a été retouvé", i, indiceColonneHautGauche + 1)
                    If p.Nature = ParamNature.Unique Then
                        EcrireCellule(p.ValeurUniqueAsObject, i, indiceColonneHautGauche + 1)
                        SelectionRange(i, indiceColonneHautGauche + 1, i, indiceColonneHautGauche + 1)
                        changeCouleurTexteRange(Color.Blue)
                    Else
                        'MsgBox("Le paramètre " & p.description & " est déliné.")
                        CreeFeuilleOMANE("ParamDecl_" & p.Nom, "Table de paramétrage du " & p.Description)
                        creerTableau(p.Description, p.Valeurs, 8, 3)
                        Me.ChangerDeFeuilleActive("Param_Generaux")
                        EcrireCellule("Onglet ParamDecl_" & p.Nom, i, indiceColonneHautGauche + 1)
                        SelectionRange(i, indiceColonneHautGauche + 1, i, indiceColonneHautGauche + 1)
                        changeCouleurTexteRange(Color.Red)
                    End If
                End If
            Next
        Next

        'Traitements spécifiques pour les tables de travail :
        'Récupération des traitements (les tables de mortalité récupérée sont non abattues)
        _universTxGarantis.ListeTraitements.TraitTbleMortF.Calculer_DataTable()
        Dim dtble_MortF As DataTable = _universTxGarantis.ListeTraitements.TraitTbleMortF.DataTableResultat
        _universTxGarantis.ListeTraitements.TraitTbleMortH.Calculer_DataTable()
        Dim dtble_MortH As DataTable = _universTxGarantis.ListeTraitements.TraitTbleMortH.DataTableResultat

        'Récupération de la table d'abattement des taux de maintien en INC INV en raison de la franchise
        Dim NomTableMaintienINCINV_Fra = _
                (From InfoTable As IInfoTableReferentiel In _universTxGarantis.Referentiel.TablesINCINV_Fra.InfoTables
                Select InfoTable
                Where InfoTable.NomFichier = _universTxGarantis.ListeParametres.tble_maintien_incinvFRA.ValeurUnique.ToString).AsEnumerable.FirstOrDefault.NomTable
        Dim dtble_INCINVfra As DataTable = _universTxGarantis.Referentiel.TablesINCINV_Fra.Factory.Item(NomTableMaintienINCINV_Fra).DataTable

        'Récupération de la table des taux de maintien en INC / INV hors franchise
        Dim NomTableMaintienINCINV_Tx = _
                (From InfoTable As IInfoTableReferentiel In _universTxGarantis.Referentiel.TablesINCINV_Tx.InfoTables
                 Select InfoTable
                 Where InfoTable.NomFichier = _universTxGarantis.ListeParametres.Tble_maintien_incinv.ValeurUnique).AsEnumerable.FirstOrDefault.NomTable
        Dim dtble_INCINVtaux As DataTable = _universTxGarantis.Referentiel.TablesINCINV_Tx.Factory.Item(NomTableMaintienINCINV_Tx).DataTable

        _universTxGarantis.ListeTraitements.TraitGrilleTarifaire.Calculer_DataTable()
        Dim dtble_Tarif As DataTable = _universTxGarantis.ListeTraitements.TraitGrilleTarifaire.DataTableResultat

        CreeFeuilleOMANE("ParamTBLE_Mort", "Tables de mortalité")
        creerTableau("Table de mortalité des femmes", dtble_MortF, 8, 3)
        creerTableau("Table de mortalité des hommes", dtble_MortH, 8, 6)
        CreeFeuilleOMANE("ParamTBLE_INCINVtaux", "Taux de maintien en incapacité / invalidité hors franchises")
        creerTableau("Taux de maintien en incap/inval", dtble_INCINVtaux, 8, 3)
        CreeFeuilleOMANE("ParamTBLE_INCINVfra", "Taux d'abattement sur les probabilité de maintien dûs à la franchise")
        creerTableau("Abattements liés à la franchise en incap/inval", dtble_INCINVfra, 8, 3)
        CreeFeuilleOMANE("ParamTBLE_Tarifs", "Grille tarifaire")
        creerTableau("Grille tarifaire", dtble_Tarif, 8, 3)

    End Sub

    Public Sub ExcelAffResDetaillesScenCentral()
        ChangerDeFeuilleActive("Calculs_Segments")
        Dim tbleResultatMoteur As DataTable = _universTxGarantis.ListeTraitements.TraitMoteurMethode1.tableTravail
        creerTableau("Variables de segmentation", tbleResultatMoteur, 7, 4)
        Dim numSegments As DataTable = New DataTable
        numSegments.Columns.Add("Num_Seg", GetType(Integer))
        For i As Integer = 0 To tbleResultatMoteur.Rows.Count - 1
            Dim newRow As DataRow = numSegments.NewRow
            newRow(0) = i + 1
            numSegments.Rows.Add(newRow)
        Next
        'Ajouter un tableau pour les N° de segments
        creerTableau("Id. Segments", numSegments, 7, 3)
    End Sub

    Public Sub CreeFeuilleOMANE(ByVal nomFeuille As String, ByVal titre As String)
        creerNouvelleFeuille(nomFeuille)
        HauteurLigne(1, 33.75)
        colorieRange(Color.FromArgb(0, 51, 102))
        HauteurLigne(2, 2.25)
        colorieRange(Color.Red)
        HauteurLigne(3, 33.75)
        colorieRange(Color.FromArgb(192, 192, 192))
        LargeurColonne(1, 10.71)
        colorieRange(Color.Black)
        AfficherGridLines(False)

        'Ecriture de l'entête outil taux garanti
        EcrireCellule("Outil de calcul de la rémunération des distributeurs", 1, 2)
        SelectionRange(1, 2, 1, 11)
        changeCouleurTexteRange(Color.White)
        _MonRange.Font.Size = 14
        _MonRange.Font.Bold = True
        _MonRange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter
        _MonRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenterAcrossSelection

        'Ecriture du titre
        EcrireCellule(titre, 3, 2)
        SelectionRange(3, 2, 3, 11)
        Me.changeCouleurTexteRange(Color.Black)
        _MonRange.Font.Size = 14
        _MonRange.Font.Bold = True
        _MonRange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter
        _MonRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenterAcrossSelection
    End Sub

End Class
